package com.chukun.interview.feature.inf.base;

/**
 * 继承封闭类的正方形类
 */
public non-sealed class PermitsSquare extends SealedShape {

    public final double side;

    public PermitsSquare(String id, double side) {
        super(id);
        this.side = side;
    }

    @Override
    public double area() {
        return side * side;
    }

    /**
     * 改进是否是正方形的方法，目前看此方法没有缺陷了
     * 由于 SealedShape 是个封闭类，在这段代码的许可范围内，一个形状 SealedShape 的对象要么是一个圆形 PermitsRectangle 的实例，要么是一个正方形 PermitsSquare 的实例
     *
     * @param shape
     * @return
     */
    public static boolean isSquare(SealedShape shape) {
        if (shape instanceof PermitsRectangle rect) {
            return rect.length == rect.width;
        }
        return (shape instanceof PermitsSquare);
    }
}
